<?php
// 该控制器为商品类别控制器
// 提供后台执行浏览、添加、修改、删除功能；
namespace App\Http\Controllers\admin;
use DB;
use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;

class TypeController extends Controller
{
    /**
	 *	用户类别添加界面
	 *	/admin/type/add
     */
    public function getAdd1($id) {

        // 加载添加用户界面的视图
    	return view('d.type.add',['list' => self::cates(),'id' => $id]);
    }

    /**
     *  用户类别添加界面
     *  /admin/type/add
     */
    public function getAdd() {

        // 加载添加用户界面的视图
        return view('d.type.add',['list' => self::cates()]);
    }

    /**
     *  执行用户类别添加操作
     *  /admin/type/insert
     */
    public function postInsert(Request $request) {

        // 使用laveral中自带表单验证
    	$this -> validate($request,[

    		// 设置检验规则
    		'name' => 'required',
    	],[

    		// 设置报错信息
    		'name.required' => '类别名称不能为空',
    	]);

    	$data = $request -> except('_token');

        // 判断是否为顶级分类
    	if($request -> input('pid') == '0') {
    		$data['path'] = '0';
    	} else {
    		$path = DB::table('gs_type') -> where('id','=',$request -> input('pid')) -> select('path') -> first();
	    	$newPath = $path['path'].','.$request -> input('pid'); 	
	    	$data['path'] = $newPath;
    	}

        // 执行插入操作
    	$res = DB::table('gs_type') -> insert($data);

        // 判断执行结果是否成功
    	if($res) {
    		return redirect ('/admin/type/index') -> with('success','添加成功');
    	} else {
    		return back() -> with('error','添加失败');
    	}
    }

    /**
     *  对分类数据进行分类并获取排序结果
     *  
     */
    public static function cates() {

        // 执行查询结果集操作
    	$res = DB::table('gs_type') -> select(DB::raw("*,concat(path,',',id) as paths"))
    	 -> orderBy('paths')
    	 -> get();

         // 遍历结果集 修改name值
    	foreach($res as $k => &$v) {
    		$num = substr_count($v['paths'],',') - 1;
    		$v['name'] = str_repeat('|---',$num).$v['name'];
    	}

    	return $res;
    }

    /**
     *  用户类别浏览界面
     *  /admin/type/index
     */
    public function getIndex(Request $request) {

        // 获取分页条目
        $page = $request -> has('num') ? $request -> input('num') : '50';

        // 获取排序的结果集
        $res = DB::table('gs_type')
                     -> select(DB::raw("*,concat(path,',',id) as paths"))
                     -> orderBy('paths')
                     // -> orderBy('id')
                     -> paginate($page);
         
        // 声明数组用于存储修改后的数据 
        $data = [];

        // 遍历结果集 给name前补充相应图标
        foreach($res as $k => &$v) {
            $num = substr_count($v['paths'],',') - 1;

            // 对分类级别进行判定并修改其name
            if($num == '0'){
                $v['name'] = '<div class="icol-page-paste"></div> '.$v['name'];
            } else if($num == '1'){
                $v['name'] = ' &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<div class="icol-page-2"></div> '.$v['name'];
            } else if($num == '2'){
                $v['name'] = ' &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<div class="icol-page-2-copy"></div> '.$v['name'];
            } else {
                unset($v);
            }  
            $data[] = $v;
        }

    	return view('d.type.index',['list' => $res,'data' => $data,'page' => $page,'request' => $request]);
    }

    /**
    *  执行商品类别删除操作
    *  /admin/type/insert
    */
    public function getDelete($id) {

        //查询该类下是否有子类 
        $res = DB::table('gs_type') -> where('pid','=',$id) -> first();

        // 判断是否可以删除
        if ($res) {
            return back() -> with('error','该类有子类不能删除');
        } else {

            // 执行删除操作
            $res = DB::table('gs_type') -> where('id','=',$id) -> delete();

            // 判断删除是否执行成功
            if($res){
                return redirect('/admin/type/index') -> with('success','删除成功');
            } else {
                return back() -> with('error','删除失败');
            }
        }
    }

    /**
    *  加载商品类别编辑页面
    *  /admin/type/edit
    */
    public function getEdit($id) {

        // 获取要修改的数据 
        $res = DB::table('gs_type') -> where('id','=',$id) -> first();

        // 获取数据的父类名称
        $pname = DB::table('gs_type') -> where('id','=',$res['pid']) -> first()['name'];
        $res['pname'] = $pname;

        // 加载视图
        return view('d.type.edit',['v' => $res]);
    }

    /**
    *  执行商品编辑操作
    *  /admin/type/update
    */
    public function postUpdate(Request $request) {

        // 获取要编辑的数据
        $data = $request -> except(['_token'],['id']);
        $id = $request -> input('id');

        // 执行编辑操作
        $res = DB::table('gs_type') -> where('id','=',$id) -> update($data);

        // 判断是否执行成功
        if($res) {
            return redirect('/admin/type/index') -> with('success','编辑成功');
        } else {
            return back() -> with('error','编辑失败');
        }
    }
}
